package algoritmos;

import java.util.ArrayList;
import java.util.List;

import mapeamento.MapeamentoAbsoluto;
import parsedquery.Conceito;
import finalquery.For;

public class HandleHorizontalFragments {
	
	public static List<For> execute(List<Conceito> query, List<MapeamentoAbsoluto> mapAbsoluto, boolean binded) {
		
		List<For> cFor = new ArrayList<For>();
		String prevLCM = null;
		
		for (int i = 0; i < query.size(); i++) {
			Conceito con = query.get(i);
			
			if ((!con.getLcm().equals(prevLCM)) && !binded) {
				int cont = 0;
				StringBuffer expressao = new StringBuffer();
				
				for (int j = 0; j < con.getFontes().size(); j++) {
					cont++;
					if (cont > 1) {
						expressao.append(" | ");
					}
					String caminho = procuraCaminhoAbsoluto(con.getConceito(), con.getFontes().get(j), mapAbsoluto);
					expressao.append("doc(\"" + con.getFontes().get(j) + "\")" + caminho);
				}
				
				For clausulaFor = new For("$v" + con.getOid(), expressao.toString());
				cFor.add(clausulaFor);
			}
			prevLCM = con.getLcm();
		}

		return cFor;
	}
	
	private static String procuraCaminhoAbsoluto(String conceito, String fonte, List<MapeamentoAbsoluto> mapAbsoluto) {
		String caminho = null;
		
		for (int i = 0; i < mapAbsoluto.size(); i++) {
			MapeamentoAbsoluto map = mapAbsoluto.get(i);
			if (map.getConceito().equals(conceito) && map.getUrl().equals(fonte)) {
				caminho = map.getExpressao();
			}
		}

		return caminho;
	}
}
